package com.ideaaedi.commonspring.lite.ratelimiter;

import org.springframework.core.Ordered;

/**
 * 限流器配置
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img
 * src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 2100.10.7.LTS17
 */
public @interface RateLimiterConfig {
    
    /**
     * aop的优先级
     */
    int aopPriority() default Ordered.HIGHEST_PRECEDENCE + 200;
    
    /**
     * 是否启用默认redis-key监听器（用于对相关限流redis键设置过期时间），以防止相关redis-key沉积过多
     * <p>
     * 详见{@link com.ideaaedi.commonspring.listener.DefaultRateLimiterExpireListener}
     * </p>
     * <p>
     * 提示：如果不启用的话，建议自行实现对{@link com.ideaaedi.commonspring.event.RateLimitValidateEvent}事件的监听处理
     * </p>
     */
    boolean enableDefaultExpireListener() default true;

    /**
     *
     * 限流redis-key在窗口期后的过期时长，单位秒（详细说明见'注3'）
     * <pre>
     * 注1：当enableDefaultExpireListener为true时，此字段有效。
     * 注2：若值<=0，则按0处理
     * 注3：根据{@link com.ideaaedi.commonspring.listener.DefaultRateLimiterExpireListener}中的代
     *     码逻辑。限流相关redis-key过期时间 = 时间窗时长A + 过期时长B
     *     此配置设置的即为 过期时长B
     * </pre>
     */
    long expireDuration() default 86400;
}
